package cn.boundtw2.jihe.map;

import java.util.HashMap;
import java.util.Map;

/*
   java.util.Map<k,v>集合
   特点：
        1. Map集合是一个双列集合，一个元素包含两个值（一个key，一个value）
        2. Map集合中的元素，key和val的数据类型可以相同，也可以不同
        3. Map集合中的元素，key是不允许重复的
        4. Map集合中的元素，key和value是一一对应
    java.util.HashMap<k,v>集合 implement Map<k,v>接口
    HashMap集合特点：
        1.HashMap集合底层是哈希表，查询的速度特别快
             JDK1.8前： 数组+单向链表
             JDK1.8后： 数组+单向链表/红黑树（链表长度超过8）：提高查询的速度
        2.HashMap集合是一个无序的集合，存储元素和取出元素的顺序有可能不一致
     java.util.LinkedHashMap<k,v>集合 extends HashMap<k,v>集合
     LinedHashMap的特点：
           1. LinkedHashMap集合底层是哈希表+链表（保证迭代顺序）
           2. LinedHashMap集合是一个有序的集合，存储元素和取出元素的顺序是一致的
 */
public class demo01Map {
    public static void main(String[] args) {
        show04();
    }

    /*
    public V put(K key,V value);将指定的值与此映射中的指定键关联（可选操作）。
    返回值： v
          存储键值对的时候，key不重复，返回值v是null
          存储键值对的时候，key重复，会使用新的value替换map中的value，返回被替换的value值
    */
    public static void show01() {
        Map<String, String> map = new HashMap<>();

        String v1 = map.put("李晨", "范冰冰1");
        System.out.println("v1:" + v1);

        String v2 = map.put("李晨", "范冰冰2");
        System.out.println("v2:" + v2);

        System.out.println(map);//{李晨=范冰冰2}

        map.put("冷锋", "龙小云");
        map.put("杨过", "小龙女");
        map.put("尹志平", "小龙女");
        System.out.println(map);
    }

    //V remove(Object key)如果存在一个键的映射关系，则将其从此映射中移除（可选操作）。
    public static void show02() {
        Map<String, Integer> map = new HashMap<>();
        map.put("赵丽颖", 168);
        map.put("杨幂", 165);
        map.put("林志玲", 178);
        System.out.println(map);

        Integer v1 = map.remove("林志玲");
        System.out.println("v1:" + v1);//v1:178

        System.out.println(map);//{赵丽颖=168, 杨幂=165}


    }

    //V get(Object key)返回指定键所映射的值；如果此映射不包含该键的映射关系，则返回 null。
    public static void show03() {
        Map<String, Integer> map = new HashMap<>();
        map.put("赵丽颖", 168);
        map.put("杨幂", 165);
        map.put("林志玲", 178);
        System.out.println(map);

        Integer v1 = map.get("林志玲");
        System.out.println("v1:" + v1);//178
        Integer v2 = map.get("dilirb");
        System.out.println("v2:" + v2);//null
    }

    // boolean containsKey(Object key)如果此映射包含指定键的映射关系，则返回 true。
    public static void show04() {
        Map<String, Integer> map = new HashMap<>();
        map.put("赵丽颖", 168);
        map.put("杨幂", 165);
        map.put("林志玲", 178);
        System.out.println(map);

        boolean b1 = map.containsKey("赵丽颖");
        System.out.println("b1:" + b1);

        boolean b2 = map.containsKey("赵颖");
        System.out.println("b2:" + b2);
    }

}

